#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sql.h>

MYSQL *sqlpool[THREADNUM];

/*
*	函数功能：		初始化sql连接
*	函数参数	：	无
*	函数返回值：sql连接指针
*		  成功：指针
*		  失败：NULL
*/
static MYSQL *sql_init(void)
{
	MYSQL *conn = NULL;

	conn = mysql_init(NULL);
	if(!mysql_real_connect(conn,SQLSERVER,SQLUSER,SQLPASSWD,SQLDATABASE,0,NULL,0))
	{
		syslog(LOG_ERR,"mysql_real_connect error %s",mysql_error(conn));
		return NULL;
	}

	return conn;
}

/*
*	函数功能：		sql创建数据表
*	函数参数	：	1、sql指针
*				2、sql创建数据表语句
*	函数返回值：是否成功
*		  成功：0
*		  失败：<0
*/
int sql_create_table(MYSQL *conn, char *query)
{
	while(mysql_real_query(conn,query,strlen(query)))
	{
		syslog(LOG_ERR,"sql_create_table error %s",mysql_error(conn));
		return -1;
	}
	
	return 0;
}

/*
*	函数功能：		向sql数据表中插入数据
*	函数参数	：	1、sql指针
*				2、sql插入数据语句
*	函数返回值：是否成功
*		  成功：0
*		  失败：<0
*/
int sql_insert(MYSQL *conn, char *query)
{
	while(mysql_real_query(conn,query,strlen(query)))
	{
		syslog(LOG_ERR,"sql_insert error %s",mysql_error(conn));
		return -1;
	}
	
	return 0;
}

/*
*	函数功能：		向sql数据表中删除数据
*	函数参数	：	1、sql指针
*				2、sql删除数据语句
*	函数返回值：是否成功
*		  成功：0
*		  失败：<0
*/
int sql_del(MYSQL *conn, char *query)
{
	while(mysql_real_query(conn,query,strlen(query)))
	{
		syslog(LOG_ERR,"sql_del error %s",mysql_error(conn));
		return -1;
	}
	
	return 0;
}

/*
*	函数功能：		更改sql数据表中数据
*	函数参数	：	1、sql指针
*				2、sql更改数据语句
*	函数返回值：是否成功
*		  成功：0
*		  失败：<0
*/
int sql_edit(MYSQL *conn, char *query)
{
	while(mysql_real_query(conn,query,strlen(query)))
	{
		syslog(LOG_ERR,"sql_edit error %s",mysql_error(conn));
		return -1;
	}
	
	return 0;
}

/*
*	函数功能：		从sql数据表中查询数据
*	函数参数	：	1、sql指针
*				2、sql查询数据语句
*	函数返回值：是否成功
*		  成功：返回查询结果指针
*		  失败：NULL
*/
MYSQL_RES *sql_search(MYSQL *conn, char *query)
{
	MYSQL_RES *sqlRes = NULL;

	while(mysql_real_query(conn,query,strlen(query)))
	{
		syslog(LOG_ERR,"sql_search error %s",mysql_error(conn));
		return NULL;
	}
	
	sqlRes = mysql_store_result(conn);

	return sqlRes;
}

/*
*	函数功能：		创建sql静态连接池
*	函数参数	：	空
*	函数返回值：是否成功
*		  成功：0
*		  失败：<0
*/
int sql_connPoolInit(void)
{
	int i;

	for(i=0;i<THREADNUM;i++)
	{
		sqlpool[i] = sql_init();
		if(sqlpool[i] == NULL)
		{
			syslog(LOG_ERR,"sql init error");
			return -1;
		}
	}

	return 0;
}

/*
*	函数功能：		销毁sql静态连接池
*	函数参数	：	空
*	函数返回值：空
*/
void sql_connPoolDestory(void)
{
	int i;

	for(i=0;i<THREADNUM;i++)
		mysql_close(sqlpool[i]);
	
	syslog(LOG_DEBUG,"sql exit sucess");
}

